package org.wheel.plugins.toolkit.jdbc.pool.util.excution;

import org.wheel.plugins.toolkit.sql.core.AbstractWrapper;
import org.wheel.plugins.toolkit.sql.core.LambdaInsertWrapper;
import org.wheel.plugins.toolkit.sql.enums.SqlModel;

import java.util.LinkedHashMap;
import java.util.Map;

public final class LambdaSqlResolver {

    /**
     * 将 LambdaQueryWrapper，LambdaUpdateWrapper，LambdaDeleteWrapper 解析成 Triple<sql, param, model>
     */
    public static SqlTuple<String, LinkedHashMap<String,Object>, SqlModel> resolve(AbstractWrapper<?,?> wrapper) {
        // 1. 利用 MP 内部 SQL 构建器
        String sql = wrapper.getSql();          // WHERE xxx AND yyy
        // 2. 提取参数
        Map<String, Object> paramMap = wrapper.getParamMap();
        LinkedHashMap<String, Object> param = new LinkedHashMap<>(paramMap);
        // 3. 固定用 PROPERTY_NAME 模型（:name 占位符）
        return new SqlTuple<>(sql, param, wrapper.getSqlModel());
    }

    /**
     * 单独为 LambdaInsertWrapper 新增语句解析成 Triple<sql, param, model>
     * @param wrapper
     * @return
     * @param <T>
     */
    public static <T> SqlTuple<String, LinkedHashMap<String,Object>, SqlModel> resolve(LambdaInsertWrapper<T> wrapper) {
        String sql = wrapper.getSql();
        LinkedHashMap<String, Object> params = wrapper.getParamMap();
        SqlModel model = wrapper.getSqlModel();
        return new SqlTuple<>(sql, params, model);
    }
}